#include "config.h"

extern struct stConfig config;

int32_t loadConfig(){
	FILE *archivo;
	char *buffer, *parametro;


	buffer = malloc(sizeof(char)*200);
	parametro = malloc(sizeof(char)*200);


	 archivo = fopen("config.txt", "r");

	if (archivo == NULL) /*controlo que abrio el archivo*/
	{
		//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),2,"Archivo no encontrado","");
		printf("Error al abrir el archivo de configuracion \n");
		return 0;
	}

	while(!feof(archivo))
	{
		fgets(buffer,100,archivo);
		strcpy(parametro,parametroEnLinea(buffer));
		if(strcmp(parametro,"ip") == 0)
		{
			strcpy(config.ip,valorLinea(buffer));
			config.ip[posicionCharEnCadena(config.ip,'\n')]='\0';
			printf("IP %s\n", config.ip);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"tcp") == 0)
		{
			strcpy(config.tcp,valorLinea(buffer));
			config.tcp[posicionCharEnCadena(config.tcp,'\n')]='\0';
			printf("TCP= %s\n", config.tcp);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"cantidadConexiones") == 0)
		{
			strcpy(config.cantidadConexiones,valorLinea(buffer));
			config.cantidadConexiones[posicionCharEnCadena(config.cantidadConexiones,'\n')]='\0';
			printf("cantidadConexiones= %d\n", config.cantidadConexiones);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"pathFS") == 0)
		{
			strcpy(config.pathFS,valorLinea(buffer));
			config.pathFS[posicionCharEnCadena(config.pathFS,'\n')]='\0';
			printf("pathFS= %s\n", config.pathFS);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"tamanioCache") == 0)
		{
			//strcpy(config.tamanioCache,valorLinea(buffer));
			//config.tamanioCache[posicionCharEnCadena(config.tamanioCache,'\n')]='\0';
			config.tamanioCache = atoi(valorLinea(buffer));
			//printf("tamanioCache= %s\n", config.tamanioCache);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"loguear") == 0)
		{
			config.loguear = atoi(valorLinea(buffer));
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"EOF") == 0)
		{
			printf("EOF");
			fclose (archivo);
			free (buffer);
			free(parametro);

			return 1;
		}

		//fgets(buffer,100,archivo);
	}

	return 1;

}


char *parametroEnLinea(char *cadena) /*DEVUELVE UNA CADENA CON EL PARAMETRO DEL CONFIG */
{
	char *aux;

	aux=cadena;
	aux[posicionCharEnCadena(aux,'=')]='\0';

	return aux;
}

char *valorLinea(char *cadena) /*DEVUELVE UNA CADENA CON LOS CARACTERES DESPUES DEL '=' */
{
	while(*cadena!='=' && *cadena!='\0')
	{
		cadena++;
	}
	cadena++;

	return cadena;
}

int32_t posicionCharEnCadena(char *cadena, const char caracter) /*DEVUELVE UN INTEGER CON LA CANTIDAD DE CARACTERES antes  DEL SEP */
{
	int32_t cont=0;
	while(*cadena!=caracter)
	{
		cont++;
		cadena++;
	}
	return cont;
}
